﻿package hanoi {
	import flash.events.Event;
	
	/**
	 * Eventos que puedan ocurrir en el juego de las torres de hanoi.
	 */
	public final class HanoiEvent extends Event {
		/**
		 * Evento iniciado antes de mover un disco.
		 * @eventType discMoved
		 */
		public static const DISC_MOVED:String = "discMoved";
		
		/**
		 * Juego donde ocurrió el evento.
		 */
		private var _game:Hanoi;
		/**
		 * Disco relacionado con el evento.
		 */
		private var _disc:Disc;
		/**
		 * Torre de origen.
		 */
		private var _from:Tower;
		/**
		 * Torre de destino.
		 */
		private var _to:Tower;
		
		/**
		 * Constructor.
		 * @param type Tipo de evento.
		 */
		public function HanoiEvent(type:String, game:Hanoi, disc:Disc, from:Tower, to:Tower) {
			super(type, false, false);
			_game = game;
			_disc = disc;
			_from = from;
			_to = to;
		} 
		
		/**
		 * Juego donde ocurrió el evento.
		 */
		public function get game():Hanoi {
			return _game;
		}
		
		/**
		 * Disco relacionado con el evento.
		 */
		public function get disc():Disc {
			return _disc;
		}
		
		/**
		 * Torre de origen.
		 */
		public function get from():Tower {
			return _from;
		}
		
		/**
		 * Torre de destino.
		 */
		public function get to():Tower {
			return _to;
		}
		
		/**
		 * Crea una copia de este objeto.
		 */
		public override function clone():Event { 
			return new HanoiEvent(type, game, disc, from, to);
		} 
		
		/**
		 * Representación textual del objeto.
		 */
		public override function toString():String { 
			return formatToString("HanoiEvent", "type", "game", "disc", "from", "to", "eventPhase"); 
		}
		
	}
	
}